package br.com.aerusc.gui.panel;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.logging.Logger;

import br.com.aerusc.entity.Jogador;
import br.com.aerusc.entity.Mensalidade;
import br.com.aerusc.enumerators.EnumMes;
import br.com.aerusc.filters.FiltroMensalidade;
import br.com.aerusc.persistence.dao.JogadorDAO;
import br.com.aerusc.persistence.dao.MensalidadeDAO;

import com.vaadin.data.util.BeanContainer;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Select;
import com.vaadin.ui.Table;

public class PanelConferenciaMensalidadeJogadores extends Panel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static final String COMMON_FIELD_WIDTH = "16em";
	private static final Logger log = Logger.getLogger(PanelConferenciaMensalidadeJogadores.class.getName());
	private Table tableJogadores = new Table("Jogadores com Mensalidades Atrasadas");
	private Select selectAno;
	private Select selectMes;
	private GridLayout gridLayout;
	private BeanContainer<Long, Jogador> beansJogador;
	private Button buttonFiltrar;

	public PanelConferenciaMensalidadeJogadores() {
		gridLayout = new GridLayout(2, 2);
		Label labelMes = new Label("Mês :");
		labelMes.setWidth(COMMON_FIELD_WIDTH);
		selectMes = new Select();
		for (EnumMes enumerator : EnumMes.values()) {
			selectMes.addItem(enumerator.getCodigo());
			selectMes.setItemCaption(enumerator.getCodigo(), enumerator.getDescricao());
		}
		selectMes.setRequired(true);
		selectMes.setRequiredError("Por Favor, selecione um Mês");
		gridLayout.addComponent(labelMes);
		gridLayout.addComponent(selectMes);
		Label labelAno = new Label("Ano :");
		labelAno.setWidth(COMMON_FIELD_WIDTH);
		selectAno = new Select();
		Calendar cal = Calendar.getInstance();
		for(int aux = 0;aux<4;aux++){
			Integer ano = cal.get(Calendar.YEAR) + aux -1;
			selectAno.addItem(ano);
			selectAno.setItemCaption(ano, ano.toString());
		}
		selectAno.setValue(cal.get(Calendar.YEAR));
		selectAno.setRequired(true);
		selectAno.setRequiredError("Por Favor, selecione um Ano");
		gridLayout.addComponent(labelAno);
		gridLayout.addComponent(selectAno);
		addComponent(gridLayout);
		addComponent(GetButtonFiltrar());
		addComponent(getTableJogadores());
	}

	public BeanContainer<Long, Jogador> getBeansJogador() {
		beansJogador = new BeanContainer<Long, Jogador>(Jogador.class);
		beansJogador.setBeanIdProperty("id");
		return beansJogador;
	}

	public Table getTableJogadores() {
		tableJogadores.setContainerDataSource(getBeansJogador());
		tableJogadores.setWidth("100%");
		tableJogadores.setSelectable(true);
		tableJogadores.setImmediate(true);
		tableJogadores.setVisibleColumns(new String[] { "nome", "email", "numeroCarteira", "telefone" });
		tableJogadores.setColumnHeaders(new String[] { "Nome", "email", "Numero Carteira", "Telefone" });
		return tableJogadores;
	}

	public Button GetButtonFiltrar() {
		buttonFiltrar = new Button("Filtrar", new Button.ClickListener() {

			@Override
			public void buttonClick(ClickEvent event) {
				FiltroMensalidade filtro = new FiltroMensalidade();
				filtro.setMes((Integer) selectMes.getValue());
				filtro.setAno((Integer) selectAno.getValue());
				filtro.setSituacao(false);
				MensalidadeDAO dao = new MensalidadeDAO();
				List<Mensalidade> mensalidades = dao.listarPorFiltro(filtro);
				List<Jogador> jogadores = new ArrayList<Jogador>();
				JogadorDAO jogadorDao = new JogadorDAO();
				for(Mensalidade mensalidade : mensalidades){
					jogadores.add(jogadorDao.recuperar(mensalidade.getIdUsuario()));
				}
				beansJogador = getBeansJogador();
				beansJogador.addAll(jogadores);
				tableJogadores.setContainerDataSource(beansJogador);
				tableJogadores.setVisibleColumns(new String[] { "nome", "email", "numeroCarteira", "telefone" });
				tableJogadores.setColumnHeaders(new String[] { "Nome", "email", "Numero Carteira", "Telefone" });
			}
		});
		buttonFiltrar.setClickShortcut(KeyCode.ENTER);
		return buttonFiltrar;
	}
	
}
